import { EventEmitter } from '@angular/core';
import { LvSizeLD } from '../core/types';

export interface InputTagItem {
  [key: string]: any;
  value: string;
  disabled?: boolean;
}

export interface InputTagProps {
  /**
   * @description 自动聚焦
   * @default false
   */
  lvAutoFocus: boolean;

  /**
   * @description 是否支持清除，当设置为true时允许清除，显示默认的图标，支持自定义清除图标
   * @default false
   */
  lvClearIcon: string | boolean;

  /**
   * @description 是否禁用
   * @default false
   */
  lvDisabled: boolean;

  /**
   * @description 预设文案
   */
  lvPlaceholder: string;

  /**
   * @description 尺寸大小
   *  @default 'default'
   */
  lvSize: LvSizeLD;

  /**
   * @description 失焦时是否自动存储正在输入的文本
   *  @default false
   */
  lvSaveOnBlur: boolean;

  /**
   * @description 触发自动分词的分隔符
   */
  lvSeparator: string[];

  /**
   * @description 失去焦点时候触发
   */
  lvOnBlur: EventEmitter<Event>;

  /**
   * @description 控件值改变时触发
   */
  lvOnChange: EventEmitter<{ value: Array<string>; tagValue: Array<string | InputTagItem> }>;

  /**
   * @description 点击清除按钮的回调
   */
  lvOnClear: EventEmitter<void>;

  /**
   * @description 聚焦时触发
   */
  lvOnFocus: EventEmitter<Event>;

  /**
   * @description 输入框文本改变的回调。
   */
  lvOnInputChange: EventEmitter<string>;

  /**
   * @description 键盘事件的回调
   */
  lvOnKeyDown: EventEmitter<KeyboardEvent>;

  /**
   * @description 按enter键的回调，默认按enter为添加标签，传入onPressEnter后覆盖默认添加操作
   */
  lvOnPressEnter: (e: KeyboardEvent) => void;

  /**
   * @description 删除/清空标签时的回调，返回`false`的时候不会执行删除/清空
   */
  lvOnRemove: (value: Array<string | InputTagItem>) => boolean | void;
}
